package ve.ucv.patologiaocular.dao;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import ve.ucv.patologiaocular.domain.Rol;

public class RolDAOImpl implements RolDAO {
	private EntityManagerFactory entityManagerFactory;
	private EntityManager entityManager;

	public RolDAOImpl() {
		this.entityManagerFactory = Persistence
				.createEntityManagerFactory("patologiads");
		this.entityManager = entityManagerFactory.createEntityManager();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Rol> listarRoles() {
		Query q = entityManager.createQuery("select nombre from Rol nombre");
		return q.getResultList();

	}

	@Override
	public void guardar(Rol rol) {
		entityManager.getTransaction().begin();
		entityManager.persist(rol);
		entityManager.flush();
		entityManager.getTransaction().commit();
	}
	
	@Override
	public void editar(Rol rol) {
		entityManager.getTransaction().begin();
		entityManager.merge(rol);
		entityManager.flush();
		entityManager.getTransaction().commit();
	}

	@Override
	public void borrar(Rol rol) {
		entityManager.getTransaction().begin();
		entityManager.remove(rol);
		entityManager.flush();
		entityManager.getTransaction().commit();
	}

	public EntityManager getEntityManager() {
		return entityManager;
	}

	@Override
	public Rol buscar(Integer id) {
		return entityManager.find(Rol.class, id);

	}
	
	@Override
	public ArrayList<Rol> arregloRoles(){
		ArrayList<Rol> roles = new ArrayList<Rol>();
		Rol  objRol;
		   
		try {
			Query q = entityManager.createQuery("SELECT * from rol");
			if(q.getResultList()!=null){
				@SuppressWarnings("unchecked")
				List<Rol> ro = q.getResultList();
				for (Rol rol : ro) {		
					objRol = new Rol ();
					objRol.setId(rol.getId());
					objRol.setNombre(rol.getNombre());
					objRol.setDescripcion(rol.getDescripcion());
					roles.add(objRol);
				}
			}
		} 
		catch (Exception ex) {
			System.out.println("No se puede conectar a la base de datos."+ex);
		}
		return roles;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public List<Rol> buscarRolPorNombre(String nombre) {
		System.out.println("n"+nombre);
		Query q = entityManager.createQuery("select r from Rol r where r.nombre = ?1")
				.setParameter(1, nombre);
		return q.getResultList();

	}

}
